Criterion B Details

# Default ecosystem code for template development.
# This line is replaced by build_ecosystem_pages.py for each ecosystem.
ecosystem_code = 'Glaciares y Nivales'

Import Python modules.

import os
import yaml
from pathlib import Path
from lonboard import Map
from rle.core import Ecosystems, criterion_b_status, rle_category
from rle.core.eoo import make_eoo
from rle.core.aoo import make_aoo_grid

Load the country config file.

project_root = os.environ.get('PIXI_PROJECT_ROOT', str(Path('..').resolve()))
config_path = Path(project_root) / 'config' / 'country_config.yaml'
with open(config_path) as f:
    config = yaml.safe_load(f)

# Ecosystem index (the COG pixel value for this ecosystem), looked up by code
# from the canonical index table. Absent if the index has not been built yet.
import csv
ecosystem_index = None
index_csv = Path(project_root) / 'config' / 'ecosystems' / 'index.csv'
if index_csv.exists():
    with open(index_csv) as f:
        for row in csv.DictReader(f):
            if row['code'] == ecosystem_code:
                ecosystem_index = int(row['index'])
                break

Load & Filter Ecosystem Data

Load data for all the ecosystems.

import sys
# Shared config helpers live in scripts/; make them importable from here.
sys.path.insert(0, str(Path(project_root) / 'scripts'))
from _config import ensure_vector_source

source = config['ecosystem_source']
# ecosystem_code_column is optional: fall back to the name column.
ecosystem_column = source.get('ecosystem_code_column') or source.get('ecosystem_name_column')
# Prefer the ecosystem-sorted `optimized_data` copy when configured, so that
# filtering to one ecosystem uses parquet predicate pushdown instead of loading
# the whole national map into memory. Falls back to `data`.
ecosystems = Ecosystems.from_file(
    ensure_vector_source(source.get('optimized_data') or source['data']),
    ecosystem_column=ecosystem_column,
    ecosystem_name_column=source.get('ecosystem_name_column'),
    functional_group_column=source.get('functional_group_column')
)

Filter by the Glaciares y Nivales and check the number of features.

ecosystem = ecosystems.filter(ecosystem_code)
has_data = ecosystem.size() > 0
print(f'{ecosystem.size() = }')
if not has_data:
    from IPython.display import Markdown, display
    display(Markdown(
        f'**No spatial data found for {ecosystem_code}.** '
        f'Criterion B calculations are skipped.'
    ))
ecosystem.size() = 226

Extent of Occurrence (EOO) (subcriterion B1)

Extent of occurrence (EOO). The EOO of an ecosystem is the area (km2) of a minimum convex polygon – the smallest polygon in which no internal angle exceeds 180° that encompasses all known current spatial occurrences of the ecosystem type.

The minimum convex polygon (also known as a convex hull) must not exclude any areas, discontinuities or disjunctions, regardless of whether the ecosystem can occur in those areas or not. Regions such as oceans (for terrestrial ecosystems), land (for coastal or marine ecosystems), or areas outside the study area (such as in a different country) must remain included within the minimum convex polygon to ensure that this standardised method is comparable across ecosystem types. In addition, these features contribute to spreading risks across the distribution of the ecosystem by making different parts of its distribution more spatially independent.

Calculate EOO

Start by calculating the convex hull of the ecosystem’s distribution.

import geopandas as gpd

if has_data:
    ecosystem_geometry = ecosystem.geometry.union_all()
    gdf_ecosystem_polygons = gpd.GeoDataFrame(geometry=[ecosystem_geometry], crs=ecosystem.geometry.crs)
    hull = ecosystem_geometry.convex_hull
    gdf_hull = gpd.GeoDataFrame(geometry=[hull], crs=ecosystem.geometry.crs)

Display the ecosystem’s distribution and the convex hull.

from lonboard import Map, PolygonLayer
from rle.core.viz import smart_map

if has_data:
    eoo_hull = make_eoo(ecosystem).compute()
    display(smart_map([eoo_hull, ecosystem]))
/home/runner/work/rle-tyler-colombia/rle-tyler-colombia/.pixi/envs/default/lib/python3.11/site-packages/lonboard/_geoarrow/ops/reproject.py:116: UserWarning: Input being reprojected to EPSG:4326 CRS.
Lonboard is only able to render data in EPSG:4326 projection.
  warnings.warn(
/home/runner/work/rle-tyler-colombia/rle-tyler-colombia/.pixi/envs/default/lib/python3.11/site-packages/lonboard/_geoarrow/ops/reproject.py:116: UserWarning: Input being reprojected to EPSG:4326 CRS.
Lonboard is only able to render data in EPSG:4326 projection.
  warnings.warn(
if has_data:
    hull_ea = gdf_hull.to_crs("ESRI:54034")
    eoo = hull_ea.geometry.iloc[0].area / 1e6
    print(f'EOO is {eoo:.1f} km2')
EOO is 229329.9 km2

Then calculate the area of the convex hull polygon.

Direct calculation of EOO

EOO can also be calculated directly using …

if has_data:
    ecosystem.eoo

Verify that the area returned by calling make_eoo(ecosystem).compute().area_km2 is the same as the area of the convex hull polygon.

if has_data:
    assert ecosystem.eoo == eoo

Area of Occupancy (AOO) (subcriterion B2)

The protocol for this adjustment includes the following steps:

  1. Intersect AOO grid with the ecosystem’s distribution map.
  2. Calculate extent of the ecosystem type in each grid cell (area) and sum these areas to obtain the total ecosystem area (total area).
  3. Arrange grid cells in ascending order based on their area (smaller first). Calculate accumulated sum of area per cell (cumulative area).
  4. Calculate cumulative proportion by dividing cumulative area by total area (cumulative proportion takes values between 0 and 1)
  5. Calculate AOO by counting the number of cells with a cumulative proportion greater than 0.01 (i.e. exclude cells that in combination account for up to 1% of the total mapped extent of the ecosystem type).

AOO Calculation Details

Intersect AOO grid and ecosystem map

  1. Intersect AOO grid with the ecosystem’s distribution map
from pathlib import Path
from rle.core.aoo import make_aoo_grid_cached

if has_data:
    # Prefer a prebuilt grid cache (e.g. a gs:// URI) so the national AOO grid
    # is not recomputed during CI renders — computing it from the full national
    # ecosystem map peaks at many GB of RAM. Fall back to a local cache when no
    # prebuilt cache is configured. Build one with `pixi run build-caches`.
    cache_path = (
        source.get('aoo_grid_cache_url')
        or (Path(project_root) / '.cache' / 'aoo_grid.parquet')
    )
    aoo_grid = make_aoo_grid_cached(ecosystems, cache_path=cache_path)
    aoo_grid_filtered = aoo_grid.filter_by_ecosystem(ecosystem_code)

Visualize variations in the AOO grid.

from matplotlib.colors import LinearSegmentedColormap
from lonboard.colormap import apply_continuous_cmap
from rle.core.aoo import slugify_ecosystem_name

ecosystem_column = slugify_ecosystem_name(ecosystem_code)
if has_data:
    cmap = LinearSegmentedColormap.from_list("white_red", ["white", "red"])
    values = aoo_grid_filtered.grid_cells[ecosystem_column].values
    normalized = (values - values.min()) / (values.max() - values.min())
    colors = apply_continuous_cmap(normalized, cmap)
    display(smart_map([(aoo_grid_filtered, {"get_fill_color": colors}), ecosystem]))
/home/runner/work/rle-tyler-colombia/rle-tyler-colombia/.pixi/envs/default/lib/python3.11/site-packages/lonboard/_geoarrow/ops/reproject.py:116: UserWarning: Input being reprojected to EPSG:4326 CRS.
Lonboard is only able to render data in EPSG:4326 projection.
  warnings.warn(

Calculate grid cell area and total area

  1. Calculate extent of the ecosystem type in each grid cell (area) and sum these areas to obtain the total ecosystem area (total area).
if has_data:
    keep = ['geometry', 'grid_col', 'grid_row', ecosystem_column]
    gdf = aoo_grid_filtered.grid_cells[keep]
    display(gdf)
geometry grid_col grid_row Glaciares_y_Nivales
0 POLYGON ((-77.88394 0.81396, -77.88394 0.90441... -868 9 0.016181
1 POLYGON ((-77.88394 0.90441, -77.88394 0.99486... -868 10 0.063159
2 POLYGON ((-77.7941 0.90441, -77.7941 0.99486, ... -867 10 0.015660
3 POLYGON ((-77.34495 1.17576, -77.34495 1.26622... -862 13 0.015854
4 POLYGON ((-76.3568 2.2615, -76.3568 2.352, -76... -851 25 0.093585
5 POLYGON ((-76.26697 2.2615, -76.26697 2.352, -... -850 25 0.001499
6 POLYGON ((-75.99747 2.80464, -75.99747 2.89518... -847 31 0.006715
7 POLYGON ((-75.99747 2.89518, -75.99747 2.98573... -847 32 0.227638
8 POLYGON ((-75.45848 4.70788, -75.45848 4.79862... -841 52 0.009875
9 POLYGON ((-75.45848 4.79862, -75.45848 4.88937... -841 53 0.000953
10 POLYGON ((-75.36865 4.61715, -75.36865 4.70788... -840 51 0.017305
11 POLYGON ((-75.36865 4.70788, -75.36865 4.79862... -840 52 0.071388
12 POLYGON ((-75.36865 4.79862, -75.36865 4.88937... -840 53 0.033613
13 POLYGON ((-75.36865 4.88937, -75.36865 4.98013... -840 54 0.000431
14 POLYGON ((-75.27882 4.61715, -75.27882 4.70788... -839 51 0.089579
15 POLYGON ((-75.27882 4.70788, -75.27882 4.79862... -839 52 0.020462
16 POLYGON ((-75.27882 4.79862, -75.27882 4.88937... -839 53 0.365401
17 POLYGON ((-75.27882 4.88937, -75.27882 4.98013... -839 54 0.320805
18 POLYGON ((-73.75168 10.73256, -73.75168 10.824... -822 118 0.045990
19 POLYGON ((-73.75168 10.82458, -73.75168 10.916... -822 119 0.107430
20 POLYGON ((-73.66185 10.64057, -73.66185 10.732... -821 117 0.018139
21 POLYGON ((-73.66185 10.73256, -73.66185 10.824... -821 118 0.156456
22 POLYGON ((-73.66185 10.82458, -73.66185 10.916... -821 119 0.407071
23 POLYGON ((-73.57202 10.64057, -73.57202 10.732... -820 117 0.112249
24 POLYGON ((-73.57202 10.73256, -73.57202 10.824... -820 118 0.426802
25 POLYGON ((-73.57202 10.82458, -73.57202 10.916... -820 119 0.177805
26 POLYGON ((-73.48219 10.64057, -73.48219 10.732... -819 117 0.013964
27 POLYGON ((-73.48219 10.73256, -73.48219 10.824... -819 118 0.154408
28 POLYGON ((-73.48219 10.82458, -73.48219 10.916... -819 119 0.033835
29 POLYGON ((-72.76354 6.88936, -72.76354 6.98044... -811 76 0.001269
30 POLYGON ((-72.67371 6.88936, -72.67371 6.98044... -810 76 0.098901
31 POLYGON ((-72.67371 6.98044, -72.67371 7.07154... -810 77 0.043742
32 POLYGON ((-72.49404 6.16126, -72.49404 6.25222... -808 68 0.003361
33 POLYGON ((-72.49404 6.25222, -72.49404 6.34319... -808 69 0.007396
34 POLYGON ((-72.40421 6.16126, -72.40421 6.25222... -807 68 0.002056
35 POLYGON ((-72.40421 6.25222, -72.40421 6.34319... -807 69 0.031990
36 POLYGON ((-72.40421 6.34319, -72.40421 6.43418... -807 70 0.003817
37 POLYGON ((-72.40421 6.52518, -72.40421 6.6162,... -807 72 0.006836
38 POLYGON ((-72.40421 6.6162, -72.40421 6.70724,... -807 73 0.000765
39 POLYGON ((-72.31438 6.16126, -72.31438 6.25222... -806 68 0.016662
40 POLYGON ((-72.31438 6.25222, -72.31438 6.34319... -806 69 0.019547
41 POLYGON ((-72.31438 6.34319, -72.31438 6.43418... -806 70 0.028371
42 POLYGON ((-72.31438 6.43418, -72.31438 6.52518... -806 71 0.078572
43 POLYGON ((-72.31438 6.52518, -72.31438 6.6162,... -806 72 0.100837
44 POLYGON ((-72.31438 6.6162, -72.31438 6.70724,... -806 73 0.191504
45 POLYGON ((-72.31438 6.70724, -72.31438 6.79829... -806 74 0.033692
46 POLYGON ((-72.22455 6.25222, -72.22455 6.34319... -805 69 0.027227
47 POLYGON ((-72.22455 6.34319, -72.22455 6.43418... -805 70 0.494419
48 POLYGON ((-72.22455 6.43418, -72.22455 6.52518... -805 71 0.548524
49 POLYGON ((-72.22455 6.52518, -72.22455 6.6162,... -805 72 0.159196
50 POLYGON ((-72.22455 6.6162, -72.22455 6.70724,... -805 73 0.015027
51 POLYGON ((-72.13472 6.34319, -72.13472 6.43418... -804 70 0.008441
52 POLYGON ((-72.13472 6.43418, -72.13472 6.52518... -804 71 0.159585
53 POLYGON ((-72.13472 6.52518, -72.13472 6.6162,... -804 72 0.018963
54 POLYGON ((-72.04489 6.43418, -72.04489 6.52518... -803 71 0.064992
55 POLYGON ((-72.04489 6.52518, -72.04489 6.6162,... -803 72 0.021611

The column Glaciares_y_Nivales contains the (fractional) area of the ecosystem in each grid cell.

Sum up the areas of each grid cell to get the total area.

if has_data:
    total_area = gdf[ecosystem_column].sum()
    display(total_area)
np.float64(5.211551879519746)

Calculate cumulative area

  1. Arrange grid cells in ascending order based on their area (smaller first). Calculate accumulated sum of area per cell (cumulative area).
if has_data:
    gdf = gdf.sort_values(by=ecosystem_column)
    gdf["cumulative_area"] = gdf[ecosystem_column].cumsum()
    display(gdf)
geometry grid_col grid_row Glaciares_y_Nivales cumulative_area
13 POLYGON ((-75.36865 4.88937, -75.36865 4.98013... -840 54 0.000431 0.000431
38 POLYGON ((-72.40421 6.6162, -72.40421 6.70724,... -807 73 0.000765 0.001196
9 POLYGON ((-75.45848 4.79862, -75.45848 4.88937... -841 53 0.000953 0.002149
29 POLYGON ((-72.76354 6.88936, -72.76354 6.98044... -811 76 0.001269 0.003418
5 POLYGON ((-76.26697 2.2615, -76.26697 2.352, -... -850 25 0.001499 0.004916
34 POLYGON ((-72.40421 6.16126, -72.40421 6.25222... -807 68 0.002056 0.006972
32 POLYGON ((-72.49404 6.16126, -72.49404 6.25222... -808 68 0.003361 0.010333
36 POLYGON ((-72.40421 6.34319, -72.40421 6.43418... -807 70 0.003817 0.014150
6 POLYGON ((-75.99747 2.80464, -75.99747 2.89518... -847 31 0.006715 0.020865
37 POLYGON ((-72.40421 6.52518, -72.40421 6.6162,... -807 72 0.006836 0.027701
33 POLYGON ((-72.49404 6.25222, -72.49404 6.34319... -808 69 0.007396 0.035097
51 POLYGON ((-72.13472 6.34319, -72.13472 6.43418... -804 70 0.008441 0.043538
8 POLYGON ((-75.45848 4.70788, -75.45848 4.79862... -841 52 0.009875 0.053412
26 POLYGON ((-73.48219 10.64057, -73.48219 10.732... -819 117 0.013964 0.067376
50 POLYGON ((-72.22455 6.6162, -72.22455 6.70724,... -805 73 0.015027 0.082403
2 POLYGON ((-77.7941 0.90441, -77.7941 0.99486, ... -867 10 0.015660 0.098063
3 POLYGON ((-77.34495 1.17576, -77.34495 1.26622... -862 13 0.015854 0.113916
0 POLYGON ((-77.88394 0.81396, -77.88394 0.90441... -868 9 0.016181 0.130097
39 POLYGON ((-72.31438 6.16126, -72.31438 6.25222... -806 68 0.016662 0.146759
10 POLYGON ((-75.36865 4.61715, -75.36865 4.70788... -840 51 0.017305 0.164065
20 POLYGON ((-73.66185 10.64057, -73.66185 10.732... -821 117 0.018139 0.182204
53 POLYGON ((-72.13472 6.52518, -72.13472 6.6162,... -804 72 0.018963 0.201167
40 POLYGON ((-72.31438 6.25222, -72.31438 6.34319... -806 69 0.019547 0.220714
15 POLYGON ((-75.27882 4.70788, -75.27882 4.79862... -839 52 0.020462 0.241176
55 POLYGON ((-72.04489 6.52518, -72.04489 6.6162,... -803 72 0.021611 0.262786
46 POLYGON ((-72.22455 6.25222, -72.22455 6.34319... -805 69 0.027227 0.290013
41 POLYGON ((-72.31438 6.34319, -72.31438 6.43418... -806 70 0.028371 0.318385
35 POLYGON ((-72.40421 6.25222, -72.40421 6.34319... -807 69 0.031990 0.350375
12 POLYGON ((-75.36865 4.79862, -75.36865 4.88937... -840 53 0.033613 0.383987
45 POLYGON ((-72.31438 6.70724, -72.31438 6.79829... -806 74 0.033692 0.417679
28 POLYGON ((-73.48219 10.82458, -73.48219 10.916... -819 119 0.033835 0.451515
31 POLYGON ((-72.67371 6.98044, -72.67371 7.07154... -810 77 0.043742 0.495257
18 POLYGON ((-73.75168 10.73256, -73.75168 10.824... -822 118 0.045990 0.541246
1 POLYGON ((-77.88394 0.90441, -77.88394 0.99486... -868 10 0.063159 0.604405
54 POLYGON ((-72.04489 6.43418, -72.04489 6.52518... -803 71 0.064992 0.669397
11 POLYGON ((-75.36865 4.70788, -75.36865 4.79862... -840 52 0.071388 0.740785
42 POLYGON ((-72.31438 6.43418, -72.31438 6.52518... -806 71 0.078572 0.819357
14 POLYGON ((-75.27882 4.61715, -75.27882 4.70788... -839 51 0.089579 0.908936
4 POLYGON ((-76.3568 2.2615, -76.3568 2.352, -76... -851 25 0.093585 1.002521
30 POLYGON ((-72.67371 6.88936, -72.67371 6.98044... -810 76 0.098901 1.101422
43 POLYGON ((-72.31438 6.52518, -72.31438 6.6162,... -806 72 0.100837 1.202260
19 POLYGON ((-73.75168 10.82458, -73.75168 10.916... -822 119 0.107430 1.309689
23 POLYGON ((-73.57202 10.64057, -73.57202 10.732... -820 117 0.112249 1.421938
27 POLYGON ((-73.48219 10.73256, -73.48219 10.824... -819 118 0.154408 1.576346
21 POLYGON ((-73.66185 10.73256, -73.66185 10.824... -821 118 0.156456 1.732802
49 POLYGON ((-72.22455 6.52518, -72.22455 6.6162,... -805 72 0.159196 1.891997
52 POLYGON ((-72.13472 6.43418, -72.13472 6.52518... -804 71 0.159585 2.051582
25 POLYGON ((-73.57202 10.82458, -73.57202 10.916... -820 119 0.177805 2.229387
44 POLYGON ((-72.31438 6.6162, -72.31438 6.70724,... -806 73 0.191504 2.420891
7 POLYGON ((-75.99747 2.89518, -75.99747 2.98573... -847 32 0.227638 2.648529
17 POLYGON ((-75.27882 4.88937, -75.27882 4.98013... -839 54 0.320805 2.969335
16 POLYGON ((-75.27882 4.79862, -75.27882 4.88937... -839 53 0.365401 3.334736
22 POLYGON ((-73.66185 10.82458, -73.66185 10.916... -821 119 0.407071 3.741807
24 POLYGON ((-73.57202 10.73256, -73.57202 10.824... -820 118 0.426802 4.168609
47 POLYGON ((-72.22455 6.34319, -72.22455 6.43418... -805 70 0.494419 4.663028
48 POLYGON ((-72.22455 6.43418, -72.22455 6.52518... -805 71 0.548524 5.211552

Calculate cumulative proportion

  1. Calculate cumulative proportion by dividing cumulative area by total area (cumulative proportion takes values between 0 and 1)
if has_data:
    gdf["cumulative_proportion"] = gdf["cumulative_area"] / total_area
    display(gdf)
geometry grid_col grid_row Glaciares_y_Nivales cumulative_area cumulative_proportion
13 POLYGON ((-75.36865 4.88937, -75.36865 4.98013... -840 54 0.000431 0.000431 0.000083
38 POLYGON ((-72.40421 6.6162, -72.40421 6.70724,... -807 73 0.000765 0.001196 0.000230
9 POLYGON ((-75.45848 4.79862, -75.45848 4.88937... -841 53 0.000953 0.002149 0.000412
29 POLYGON ((-72.76354 6.88936, -72.76354 6.98044... -811 76 0.001269 0.003418 0.000656
5 POLYGON ((-76.26697 2.2615, -76.26697 2.352, -... -850 25 0.001499 0.004916 0.000943
34 POLYGON ((-72.40421 6.16126, -72.40421 6.25222... -807 68 0.002056 0.006972 0.001338
32 POLYGON ((-72.49404 6.16126, -72.49404 6.25222... -808 68 0.003361 0.010333 0.001983
36 POLYGON ((-72.40421 6.34319, -72.40421 6.43418... -807 70 0.003817 0.014150 0.002715
6 POLYGON ((-75.99747 2.80464, -75.99747 2.89518... -847 31 0.006715 0.020865 0.004004
37 POLYGON ((-72.40421 6.52518, -72.40421 6.6162,... -807 72 0.006836 0.027701 0.005315
33 POLYGON ((-72.49404 6.25222, -72.49404 6.34319... -808 69 0.007396 0.035097 0.006734
51 POLYGON ((-72.13472 6.34319, -72.13472 6.43418... -804 70 0.008441 0.043538 0.008354
8 POLYGON ((-75.45848 4.70788, -75.45848 4.79862... -841 52 0.009875 0.053412 0.010249
26 POLYGON ((-73.48219 10.64057, -73.48219 10.732... -819 117 0.013964 0.067376 0.012928
50 POLYGON ((-72.22455 6.6162, -72.22455 6.70724,... -805 73 0.015027 0.082403 0.015812
2 POLYGON ((-77.7941 0.90441, -77.7941 0.99486, ... -867 10 0.015660 0.098063 0.018816
3 POLYGON ((-77.34495 1.17576, -77.34495 1.26622... -862 13 0.015854 0.113916 0.021858
0 POLYGON ((-77.88394 0.81396, -77.88394 0.90441... -868 9 0.016181 0.130097 0.024963
39 POLYGON ((-72.31438 6.16126, -72.31438 6.25222... -806 68 0.016662 0.146759 0.028160
10 POLYGON ((-75.36865 4.61715, -75.36865 4.70788... -840 51 0.017305 0.164065 0.031481
20 POLYGON ((-73.66185 10.64057, -73.66185 10.732... -821 117 0.018139 0.182204 0.034962
53 POLYGON ((-72.13472 6.52518, -72.13472 6.6162,... -804 72 0.018963 0.201167 0.038600
40 POLYGON ((-72.31438 6.25222, -72.31438 6.34319... -806 69 0.019547 0.220714 0.042351
15 POLYGON ((-75.27882 4.70788, -75.27882 4.79862... -839 52 0.020462 0.241176 0.046277
55 POLYGON ((-72.04489 6.52518, -72.04489 6.6162,... -803 72 0.021611 0.262786 0.050424
46 POLYGON ((-72.22455 6.25222, -72.22455 6.34319... -805 69 0.027227 0.290013 0.055648
41 POLYGON ((-72.31438 6.34319, -72.31438 6.43418... -806 70 0.028371 0.318385 0.061092
35 POLYGON ((-72.40421 6.25222, -72.40421 6.34319... -807 69 0.031990 0.350375 0.067230
12 POLYGON ((-75.36865 4.79862, -75.36865 4.88937... -840 53 0.033613 0.383987 0.073680
45 POLYGON ((-72.31438 6.70724, -72.31438 6.79829... -806 74 0.033692 0.417679 0.080145
28 POLYGON ((-73.48219 10.82458, -73.48219 10.916... -819 119 0.033835 0.451515 0.086637
31 POLYGON ((-72.67371 6.98044, -72.67371 7.07154... -810 77 0.043742 0.495257 0.095031
18 POLYGON ((-73.75168 10.73256, -73.75168 10.824... -822 118 0.045990 0.541246 0.103855
1 POLYGON ((-77.88394 0.90441, -77.88394 0.99486... -868 10 0.063159 0.604405 0.115974
54 POLYGON ((-72.04489 6.43418, -72.04489 6.52518... -803 71 0.064992 0.669397 0.128445
11 POLYGON ((-75.36865 4.70788, -75.36865 4.79862... -840 52 0.071388 0.740785 0.142143
42 POLYGON ((-72.31438 6.43418, -72.31438 6.52518... -806 71 0.078572 0.819357 0.157219
14 POLYGON ((-75.27882 4.61715, -75.27882 4.70788... -839 51 0.089579 0.908936 0.174408
4 POLYGON ((-76.3568 2.2615, -76.3568 2.352, -76... -851 25 0.093585 1.002521 0.192365
30 POLYGON ((-72.67371 6.88936, -72.67371 6.98044... -810 76 0.098901 1.101422 0.211342
43 POLYGON ((-72.31438 6.52518, -72.31438 6.6162,... -806 72 0.100837 1.202260 0.230691
19 POLYGON ((-73.75168 10.82458, -73.75168 10.916... -822 119 0.107430 1.309689 0.251305
23 POLYGON ((-73.57202 10.64057, -73.57202 10.732... -820 117 0.112249 1.421938 0.272843
27 POLYGON ((-73.48219 10.73256, -73.48219 10.824... -819 118 0.154408 1.576346 0.302471
21 POLYGON ((-73.66185 10.73256, -73.66185 10.824... -821 118 0.156456 1.732802 0.332492
49 POLYGON ((-72.22455 6.52518, -72.22455 6.6162,... -805 72 0.159196 1.891997 0.363039
52 POLYGON ((-72.13472 6.43418, -72.13472 6.52518... -804 71 0.159585 2.051582 0.393660
25 POLYGON ((-73.57202 10.82458, -73.57202 10.916... -820 119 0.177805 2.229387 0.427778
44 POLYGON ((-72.31438 6.6162, -72.31438 6.70724,... -806 73 0.191504 2.420891 0.464524
7 POLYGON ((-75.99747 2.89518, -75.99747 2.98573... -847 32 0.227638 2.648529 0.508204
17 POLYGON ((-75.27882 4.88937, -75.27882 4.98013... -839 54 0.320805 2.969335 0.569760
16 POLYGON ((-75.27882 4.79862, -75.27882 4.88937... -839 53 0.365401 3.334736 0.639874
22 POLYGON ((-73.66185 10.82458, -73.66185 10.916... -821 119 0.407071 3.741807 0.717983
24 POLYGON ((-73.57202 10.73256, -73.57202 10.824... -820 118 0.426802 4.168609 0.799879
47 POLYGON ((-72.22455 6.34319, -72.22455 6.43418... -805 70 0.494419 4.663028 0.894748
48 POLYGON ((-72.22455 6.43418, -72.22455 6.52518... -805 71 0.548524 5.211552 1.000000

Count AOO cells

  1. Calculate AOO by counting the number of cells with a cumulative proportion greater than 0.01 (i.e. exclude cells that in combination account for up to 1% of the total mapped extent of the ecosystem type).
if has_data:
    aoo = len(gdf[gdf["cumulative_proportion"] > 0.01])
    print(f'AOO is {aoo} cells')
AOO is 44 cells

AOO Calculation (direct call)

if has_data:
    aoo_count = ecosystem.aoo
    print(f'AOO: {aoo_count} grid cells')
AOO: 44 grid cells

Criterion B Summary

Criterion B status (spatial)
Vulnerable (VU) — Glaciares y Nivales (Glaciares y Nivales), index 49

Status reflects the spatial thresholds for EOO (B1) and AOO (B2) only. A final listing under B1/B2 additionally requires at least one of: (a) an observed or inferred continuing decline; (b) threatening processes likely to cause continuing decline within 20 years; or (c) few threat-defined locations — none of which are derived from the spatial metrics.

Sub-criterion Metric Value Category
B1 EOO 229330 km² Least Concern (LC)
B2 AOO 44 cells Vulnerable (VU)
Overall B — — Vulnerable (VU)